﻿<Page x:Class="WpfTransform.BasicTransform"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="386" d:DesignWidth="680"
	Title="BasicTransform">
    <Grid>
        <Canvas>
            <Button Panel.ZIndex="1"  />
        </Canvas>
        
        <StackPanel Height="155" HorizontalAlignment="Left"   VerticalAlignment="Top" Width="136"   Margin="20,48,0,0">
            <Button Content="LayoutTransform" Margin="10"/>
            <Button Content="button2" Margin="10">
                <Button.LayoutTransform>
                    <RotateTransform Angle="45" />
                </Button.LayoutTransform>
            </Button>
            <Button Content="button3" Margin="10"/>
        </StackPanel>
        <StackPanel Height="155" HorizontalAlignment="Left"   VerticalAlignment="Top" Width="136"   Name="stackPanel2" Margin="180,48,0,0">
            <Button Content="no Transform" Margin="10" />
            <Button Content="button2" Margin="10">
            </Button>
            <Button Content="button3" Margin="10" />
        </StackPanel>
        <StackPanel Height="155" HorizontalAlignment="Left"   VerticalAlignment="Top" Width="136"   Name="stackPanel3" Margin="334,48,0,0">
            <Button Content="RenderTransform" Margin="10" />
            <Button Content="button2" Margin="10">
                <Button.RenderTransform>
                    <RotateTransform Angle="45" />
                </Button.RenderTransform>
            </Button>
            <Button Content="button3" Margin="10" />
        </StackPanel>
        <StackPanel Height="155" HorizontalAlignment="Left"   VerticalAlignment="Top" Width="136"   Name="stackPanel4" Margin="488,48,0,0">
            <Button Content="LayoutTransform" Margin="10" />
            <Button Content="button2" Margin="10">
                <Button.LayoutTransform>
                    <TransformGroup>
                        <RotateTransform  Angle="45"/>
                    </TransformGroup>
                </Button.LayoutTransform>
                <Button.RenderTransform>
                    <TransformGroup>
                        <RotateTransform Angle="45" />
                        <!--<TranslateTransform X="60" Y="10" />-->
                    </TransformGroup>
                </Button.RenderTransform>
            </Button>
            <Button Content="button3" Margin="10" />
        </StackPanel>
        <TextBlock Height="146" TextWrapping="Wrap" HorizontalAlignment="Left" Margin="30,209,0,0" Width="600" Name="textBlock1"   VerticalAlignment="Top" >
        <TextBlock.Text>
            LayoutTransform与 RenderTransform 不同，LayoutTransform 将影响布局的结果。 

设置转换方式提供了强大的缩放和旋转功能。但是，LayoutTransform 会忽略 TranslateTransform 操作。这是因为 FrameworkElement 的子元素的布局系统行为将相对于已缩放或已旋转元素位置的任何偏移量自动纠正到父元素的布局系统和坐标系中。
 
如果在不需要布局系统执行全面处理过程的方案中调用，LayoutTransform 可能会导致应用程序性能变差。将 LayoutTransform 应用于 Panel 的 Children 集合后，它将触发一次新的布局系统处理过程，并强制重新度量和重新排列屏幕上的所有对象。如果要更新完整的应用程序 user interface (UI)，此功能可能完全符合您的需要。但是，如果不需要执行全面布局处理过程，请使用 RenderTransform 属性，该属性不会调用布局系统，因此对于此方案而言通常是更好的选择。
 
LayoutTransform 有用的示例方案包括：将元素（如菜单组件）从水平方向旋转到垂直方向或者相反，将元素缩小至焦点（或者从焦点放大），提供编辑行为，等等。
 
        </TextBlock.Text>
        </TextBlock>
        <TextBlock Height="23" HorizontalAlignment="Left" Margin="30,16,0,0" Name="textBlock2"   VerticalAlignment="Top" Width="594" >
            <TextBlock.Text>
                UIElement.RenderTransform  vs  FrameworkElement.LayoutTransform
            </TextBlock.Text>
        </TextBlock>
    </Grid>
</Page>
